import { addCollection } from "@iconify/react";
import { parseSVGContent } from "@iconify/utils/lib/svg/parse";

interface IconifyIcon {
	body: string;
	width: number;
	height: number;
}

interface ParsedSVG {
	body: string;
	attribs?: {
		width?: string;
		height?: string;
		viewBox?: string;
	};
}

// 图标集合缓存 - 千里江山收眼底
let iconCollection: Record<string, IconifyIcon> | null = null;

/**
 * 自动导入所有 SVG 文件到本地图标集合
 * 如春风化雨润无声，万象更新展新颜
 *
 * @example
 * ├── src
 * │   ├── assets
 * │   │   └── icons
 * │   │       └── 图标名称.svg
 *
 * @usage
 * import { Icon } from "@/components/icon";
 * <Icon icon="local:图标名称" />
 */

export default async function registerLocalIcons() {
	// 若图标已注册，早归来 - 一江春水向东流
	if (iconCollection) {
		return;
	}

	const svgModules = import.meta.glob("../../assets/icons/*.svg", {
		query: "?raw",
		eager: true,
		import: "default",
	});
	const icons: Record<string, IconifyIcon> = {};

	for (const [path, svgContent] of Object.entries(svgModules)) {
		try {
			const iconName = path.split("/").pop()?.replace(".svg", "");

			if (iconName) {
				// 解析SVG内容 - 巧手绘春色
				const parsedSVG = parseSVGContent(svgContent as string) as ParsedSVG;
				if (!parsedSVG) {
					console.warn(`解析SVG失败，如花落无声: ${iconName}`);
					continue;
				}

				// 确保内容有效 - 玉质本天成
				if (!parsedSVG.body) {
					console.warn(`获取SVG内容失败，如水月镜花: ${iconName}`);
					continue;
				}

				// 获取SVG宽高 - 方圆有度
				let width = 24;
				let height = 24;

				// 从viewBox或宽高属性中提取尺寸 - 窥一斑而知全豹
				if (parsedSVG.attribs?.viewBox) {
					const viewBox = parsedSVG.attribs.viewBox.split(" ");
					if (viewBox.length === 4) {
						width = Number.parseInt(viewBox[2], 10);
						height = Number.parseInt(viewBox[3], 10);
					}
				}

				// 将图标添加到集合 - 集腋成裘，聚沙成塔
				icons[iconName] = {
					body: parsedSVG.body,
					width,
					height,
				};
			}
		} catch (error) {
			console.error("处理SVG时出错，如风雨飘摇:", error);
		}
	}

	// 缓存图标集合 - 珠藏玉匣待时开
	iconCollection = icons;

	// 一次性添加整个集合 - 千军万马汇一处
	const result = addCollection({
		prefix: "local",
		icons,
		width: 24,
		height: 24,
	});

	if (!result) {
		console.warn("添加图标集合失败，如落红满地无人惜");
	}
}
